package com.study.kt.skills

/**
 * <pre>
 *     author : slx
 *     time   : 2020/11/25
 *     desc   : 使用 + -运算符操作对象
 * </pre>
 */

fun main() {
    userInMap()

    val user1 = User(10)
    val user2 = User(2)
    println(user1 + user2)
    println(user1 - user2)

    testOrEmpty()
}

// orEmpty相当于?:的inline分装,除了String外 list也可以使用，提高代码可读性
fun testOrEmpty() {
    val name: String? = "slx"
    println("name=${name.orEmpty()}")
}

// 在map中使用，运算符重载在map.kt文件中已经实现
fun userInMap() {
    val map = mapOf("one" to 1, "two" to 2, "three" to 3)
    // 追加成员
    println(map + Pair("four", 4))
    // 修改成员
    println(map + Pair("one", 111))
    // 移除成员
    println(map - "two")
    // 移除多个成员
    println(map - listOf("one", "three"))
}

// 自定义运算符重载
data class User(var age: Int = 10) {
    override fun toString(): String = "age=$age"
}

operator fun User.plus(other: User): User = User(age + other.age)
operator fun User.minus(other: User): User = User(age - other.age)
